/*
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

/*
 *
 *
 *
 *
 *
 * Written by Doug Lea with assistance from members of JCP JSR-166
 * Expert Group and released to the public domain, as explained at
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

package java.util;

/**
 * FIFO queue队列，先进先出
 * 1、优先级队列，元素有优先级
 * 2、堆排序,二叉树,使用数组保存数据,非线程安全
 *
 * @see java.util.Deque
 * @see java.util.ArrayDeque
 *
 * @see java.util.concurrent.LinkedBlockingQueue
 * @see java.util.concurrent.BlockingQueue
 * @see java.util.concurrent.ArrayBlockingQueue
 * @see java.util.concurrent.LinkedBlockingQueue
 * @see java.util.concurrent.PriorityBlockingQueue
 */
public interface Queue<E> extends Collection<E> {


    // 添加
    /**
     * 添加元素e到队列的末尾。
     * @return 如果成功添加元素，则返回true；如果队列已满无法添加元素，则返回false。
     */
    boolean add(E e);


    /**
     * 将元素e添加到队列的末尾。
     * @return 如果成功添加元素，则返回true；如果队列已满无法添加元素，则返回false。
     */
    boolean offer(E e);


    // 删除
    /**
     * 从队列的头部移除并返回元素。
     * @throws NoSuchElementException 如果队列为空。
     */
    E remove();

    /**
     * 从队列的头部移除并返回元素。
     * @return 如果队列为空，则返回null。
     */
    E poll();


    // 获取
    /**
     * 获取并返回队列的头部元素，但不移除它。
     * @return 队列头部的元素。
     */
    E element();

    /**
     * 获取并返回队列的头部元素，但不移除它。
     * @return 队列头部的元素, 如果队列为空，则返回null。
     */
    E peek();

}
